const fs = require('fs');
const path = require('path');
const moment = require('moment');
const schedule = require('node-schedule');


// 源文件夹路径（D盘）  
const sourceDir = 'D:\\mes日志';
// 目标文件夹路径（C盘）  
const destDir = 'E:\\mes日志';

// 源文件夹路径（D盘）  
const sourceDir_db = 'D:\\数据库备份';
// 目标文件夹路径（C盘）  
const destDir_db = 'E:\\mesbk';

// 获取3天以前的日期  
function getOneDayBeforeDate_clear() {
  return moment().subtract(3, 'days').format('YYYY-MM-DD');
}

// 获取1天以前的日期  
function getOneDayBeforeDate() {
  return moment().subtract(1, 'days').format('YYYY-MM-DD');
}
// 复制文件夹中一天以前的内容  
function copyOldContent(src, dest, date) {
  fs.mkdirSync(dest, { recursive: true });
  fs.readdirSync(src).forEach((file) => {
    const srcPath = path.join(src, file);

    try {
      const stat = fs.lstatSync(srcPath);
      if (stat.isFile()) {
        const fileCreationTime = fs.statSync(srcPath).mtime;
        const fileCreationDate = moment(fileCreationTime).format('YYYY-MM-DD');
        if (fileCreationDate <= date) {
          const destPath = path.join(dest, file);
          try {
            fs.copyFileSync(srcPath, destPath);
          } catch (err) {
            console.error(`无法复制文件 ${srcPath}，原因：${err.message}`);
          }
        }
      } else if (stat.isDirectory()) {
        copyOldContent(srcPath, dest, date);
      }
    } catch (err) {
      console.error(`无法读取文件 ${srcPath}，原因：${err.message}`);
    }

  });
}





function clearDir(dir, date) {
  fs.readdirSync(dir).forEach((file) => {
    const filePath = path.join(dir, file);
    try {
      const stat = fs.lstatSync(filePath);
      if (stat.isFile()) {
        const fileMtime = stat.mtime;

        // 获取当前时间
        const currentDate = new Date();

        // 计算文件修改时间和当前时间的差异
        const timeDifference = currentDate - fileMtime;

        // 一天的毫秒数
        const oneDayInMs = 24 * 60 * 60 * 1000;

        // 如果文件修改时间在一天前，则删除文件
        if (timeDifference > oneDayInMs) {
          fs.unlinkSync(filePath);
        }
      } else if (stat.isDirectory()) {
        // 递归处理子目录
        clearDir(filePath, date);

        // 删除空目录
        fs.rmdirSync(filePath);
      }
    } catch (err) {
      console.error(`无法删除文件 ${filePath}，原因：${err.message}`);
    }
  });
}




// 定时任务函数  
function scheduledTask() {
  const oneDayBeforeDate = getOneDayBeforeDate();
    const oneDayBeforeDate_clear= getOneDayBeforeDate_clear();

  console.log(`开始复制${oneDayBeforeDate}以前的文件...`);
  copyOldContent(sourceDir, destDir, oneDayBeforeDate);
  console.log('mes日志文件复制完成。');
  console.log('开始清空mes日志源文件夹...');
  clearDir(sourceDir,oneDayBeforeDate_clear);
  console.log('mes日志源文件夹已清空。');


  console.log(`开始复制${oneDayBeforeDate}以前的文件...`);
  copyOldContent(sourceDir_db, destDir_db, oneDayBeforeDate);
  console.log('mes数据库log文件复制完成。');
  console.log('开始清空mes数据库log源文件夹...');
  clearDir(sourceDir_db,oneDayBeforeDate_clear);
  console.log('mes数据库log源文件夹已清空。');

}

//setInterval(scheduledTask, 1000 * 60 * 60* 24);


// 设置定时任务，每天指定时间执行一次，例如每天的凌晨1点执行  
//创建一个规则，表示每天的12点  
const rule = new schedule.RecurrenceRule();  
rule.hour = 5;  
rule.minute = 20;  
rule.second = 0;  
  
// 创建计划任务  
const job = schedule.scheduleJob(rule, function() {  
  // 在这里编写你想要执行的代码  
  scheduledTask(); 
});
console.log("自动备份服务启动")
